hhkb
모의해킹

호스트기반모의해킹_29_리버스 쉘 업그레이드

작성자 : Heehyeon Yoo|2025-12-08
# 모의해킹# Reverse Shell# TTY Upgrade# Python# Dumb Shell

1. 쉘 업그레이드 필요성

1.1 덤 쉘(Dumb Shell)

nc(Netcat)로 받은 기본적인 리버스 쉘은 기능이 매우 제한적이다.

  • 제약 사항:
    • Tab 자동 완성 불가.
    • Ctrl+C 누르면 쉘 자체가 종료됨(가장 치명적).
    • vi, ssh, mysql 등 인터랙티브(Interactive) 프로그램 실행 불가.
    • 화살표 키(명령어 히스토리) 사용 불가.

1.2 Full TTY Shell

SSH로 접속한 것과 동일한 수준의 완전한 터미널 환경을 구축하는 과정이다. 이를 통해 안정적인 작업 환경을 확보해야 한다.

2. 업그레이드 절차(Step-by-Step)

아래 과정은 반드시 순서대로 진행해야 한다.

Step 1: Python pty 모듈을 이용한 쉘 생성

타겟 시스템에 Python이 설치되어 있다면, pty 모듈을 이용해 가상 터미널을 생성한다.

python3 -c 'import pty; pty.spawn("/bin/bash")'
# 또는
python -c 'import pty; pty.spawn("/bin/bash")'

(이 시점에서 프롬프트가 bash-4.2$ 처럼 바뀐다.)

Step 2: 백그라운드 전환 및 로컬 터미널 설정

  1. Ctrl + Z 를 눌러 리버스 쉘을 백그라운드(Background)로 보낸다.
    • (공격자 로컬 터미널로 돌아옴)
  2. 로컬 터미널 설정을 변경하여 입력값을 그대로 리버스 쉘로 전달하게 한다.
    stty raw -echo; fg
    
    • stty raw -echo: 로컬 터미널의 라인 처리 및 에코를 끈다(모든 키 입력을 원격으로 전달).
    • fg: 백그라운드에 있던 쉘을 다시 포그라운드로 가져온다.

Step 3: 쉘 초기화 및 환경변수 설정

fg로 돌아오면 화면이 깨지거나 입력이 안 보이는 것처럼 보일 수 있다.

  1. reset 입력 후 엔터.(터미널 초기화)
  2. 환경 변수 설정:
    export SHELL=bash
    export TERM=xterm-256color   # 또는 xterm
    
  3. (옵션) 창 크기 맞추기:
    • 로컬에서 stty size로 크기 확인 후, 타겟에서 stty rows [행] cols [열] 설정.

3. 결과

이제 Ctrl+C를 눌러도 쉘이 죽지 않고 현재 실행 중인 프로세스만 종료되며, vi 편집기나 Tab 자동 완성을 자유롭게 사용할 수 있다.
실무나 CTF에서 리버스 쉘을 얻자마자 가장 먼저 수행해야 하는 습관이다.